{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>no surfacing</th>\n",
       "      <th>flippers</th>\n",
       "      <th>fish</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>no</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   no surfacing  flippers fish\n",
       "0             1         1  yes\n",
       "1             1         1  yes\n",
       "2             1         0   no\n",
       "3             0         1   no\n",
       "4             0         1   no"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = {\n",
    "    'no surfacing':[1,1,1,0,0],\n",
    "    'flippers':[1,1,0,1,1],\n",
    "    'fish':['yes','yes','no','no','no',]\n",
    "}\n",
    "\n",
    "df = pd.DataFrame(data)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "no     0.6\n",
       "yes    0.4\n",
       "Name: fish, dtype: float64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[:,-1].value_counts(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calEnt(df):\n",
    "    #计算每个标签的概率：数组\n",
    "    p_v = df.iloc[:,-1].value_counts(True)\n",
    "    np.log2(p_v) * p_v\n",
    "\n",
    "    return -(np.log2(p_v) * p_v).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9709505944546686"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calEnt(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bestSplit(df):\n",
    "    \n",
    "    baseEnt = calEnt(df)\n",
    "    colName =''\n",
    "    infoGain = 0\n",
    "    bestGain = 0\n",
    "\n",
    "    for col in df.columns[:-1]:\n",
    "        #当前 特征不同取值概率\n",
    "        p_v = df[col].value_counts(True)\n",
    "        ent_v = []\n",
    "        #此特征的所有值，循环算熵\n",
    "        for value in p_v.index:\n",
    "            #col 在不同取值下的熵\n",
    "            ent_v.append(calEnt(df[df[col] == value]))\n",
    "        \n",
    "        infoGain = baseEnt - (ent_v * p_v).sum()\n",
    "        if (infoGain > bestGain):\n",
    "            bestGain = infoGain\n",
    "            colName = col\n",
    "\n",
    "    return colName"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'no surfacing'"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bestSplit(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>flippers</th>\n",
       "      <th>fish</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>no</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   flippers fish\n",
       "0         1  yes\n",
       "1         1  yes\n",
       "2         0   no"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除特征列\n",
    "df[df['no surfacing']==1].drop('no surfacing',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mySplit(df,col,value):\n",
    "\n",
    "    return df[df[col]==value].drop(col,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "def createTree(df):\n",
    "    tree = {}\n",
    "    #获取特征列\n",
    "    featFreq = df.columns[:-1].value_counts(True)\n",
    "\n",
    "    #截至条件\n",
    "    if featFreq[0] == 1 or df.shape[0] == 1:\n",
    "        return df.iloc[0,0]\n",
    "\n",
    "    \n",
    "    #最优化分特征\n",
    "    bestCol = bestSplit(df)\n",
    "    valueSet = list(set(df[bestCol]))\n",
    "\n",
    "    tree[bestCol] = {}\n",
    "    for value in valueSet:\n",
    "        #删除已用特征值 和列，递归调用\n",
    "        tree[bestCol][value] = createTree(mySplit(df,bestCol,value))\n",
    "\n",
    "\n",
    "    return tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'no surfacing'"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bestSplit(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>flippers</th>\n",
       "      <th>fish</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>no</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   flippers fish\n",
       "0         1  yes\n",
       "1         1  yes\n",
       "2         0   no"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除特征列\n",
    "df[df['no surfacing']==1].drop('no surfacing',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mySplit(df,col,value):\n",
    "\n",
    "    return df[df[col]==value].drop(col,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "def createTree(df):\n",
    "\n",
    "    #最后一列 标签值\n",
    "    labelFreq = df.iloc[:,-1].value_counts(True)\n",
    "\n",
    "    #截至条件\n",
    "    if labelFreq[0] == 1 or df.shape[0] == 1:\n",
    "        #取概率最高特征值\n",
    "        return labelFreq.index[0]\n",
    "\n",
    "\n",
    "    #最优化分特征\n",
    "    bestCol = bestSplit(df)\n",
    "    valueSet = list(set(df[bestCol]))\n",
    "\n",
    "    tree = {bestCol:{}}\n",
    "    for value in valueSet:\n",
    "        #删除已用特征值 和列，递归调用\n",
    "        tree[bestCol][value] = createTree(mySplit(df,bestCol,value))\n",
    "\n",
    "\n",
    "    return tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "myTree = createTree(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.save('my.npy',myTree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "myTree =np.load('my.npy',allow_pickle=True).item()\n",
    "myTree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getValueFromTree (inX,Tree):\n",
    "    colName = next(iter(Tree))\n",
    "    colval = inX[colName]\n",
    "\n",
    "    return Tree[colName][colval]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "def classify(inX,Tree):\n",
    "    inX = dict(zip(df.columns[:-1],[0,1]))\n",
    "    label = getValueFromTree(inX,Tree)\n",
    "#遍历子树，直到底（叶子节点）\n",
    "    while type(label)== dict:\n",
    "        label = getValueFromTree(inX,label)\n",
    "\n",
    "    return label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'no'"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classify([0,1],myTree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.4, 0.8333333333333334, 'X[0] <= 0.5\\nentropy = 0.971\\nsamples = 5\\nvalue = [3, 2]'),\n",
       " Text(0.2, 0.5, 'entropy = 0.0\\nsamples = 2\\nvalue = [2, 0]'),\n",
       " Text(0.6, 0.5, 'X[1] <= 0.5\\nentropy = 0.918\\nsamples = 3\\nvalue = [1, 2]'),\n",
       " Text(0.4, 0.16666666666666666, 'entropy = 0.0\\nsamples = 1\\nvalue = [1, 0]'),\n",
       " Text(0.8, 0.16666666666666666, 'entropy = 0.0\\nsamples = 2\\nvalue = [0, 2]')]"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn import tree\n",
    "\n",
    "\n",
    "\n",
    "clf = tree.DecisionTreeClassifier(criterion=\"entropy\")\n",
    "clf = clf.fit(np.array(df.iloc[:, :-1]), np.array(df.iloc[:, -1]))\n",
    "\n",
    "tree.plot_tree(clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>prescript</th>\n",
       "      <th>astigmatic</th>\n",
       "      <th>tearRate</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>young</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>young</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>young</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>young</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>young</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>young</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>young</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>young</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>pre</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>pre</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>pre</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>pre</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>pre</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>pre</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>pre</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>pre</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>myope</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>myope</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>hyper</td>\n",
       "      <td>no</td>\n",
       "      <td>normal</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>reduced</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>presbyopic</td>\n",
       "      <td>hyper</td>\n",
       "      <td>yes</td>\n",
       "      <td>normal</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           age prescript astigmatic tearRate      label\n",
       "0        young     myope         no  reduced  no lenses\n",
       "1        young     myope         no   normal       soft\n",
       "2        young     myope        yes  reduced  no lenses\n",
       "3        young     myope        yes   normal       hard\n",
       "4        young     hyper         no  reduced  no lenses\n",
       "5        young     hyper         no   normal       soft\n",
       "6        young     hyper        yes  reduced  no lenses\n",
       "7        young     hyper        yes   normal       hard\n",
       "8          pre     myope         no  reduced  no lenses\n",
       "9          pre     myope         no   normal       soft\n",
       "10         pre     myope        yes  reduced  no lenses\n",
       "11         pre     myope        yes   normal       hard\n",
       "12         pre     hyper         no  reduced  no lenses\n",
       "13         pre     hyper         no   normal       soft\n",
       "14         pre     hyper        yes  reduced  no lenses\n",
       "15         pre     hyper        yes   normal  no lenses\n",
       "16  presbyopic     myope         no  reduced  no lenses\n",
       "17  presbyopic     myope         no   normal  no lenses\n",
       "18  presbyopic     myope        yes  reduced  no lenses\n",
       "19  presbyopic     myope        yes   normal       hard\n",
       "20  presbyopic     hyper         no  reduced  no lenses\n",
       "21  presbyopic     hyper         no   normal       soft\n",
       "22  presbyopic     hyper        yes  reduced  no lenses\n",
       "23  presbyopic     hyper        yes   normal  no lenses"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fr = open('lenses.txt')\n",
    "lenses = [inst.strip().split('\\t') for inst in fr.readlines()]\n",
    "df = pd.DataFrame(lenses)\n",
    "df.columns = [\n",
    "    'age',\n",
    "    'prescript',\n",
    "    'astigmatic',\n",
    "    'tearRate',\n",
    "    'label'\n",
    "]\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>prescript</th>\n",
       "      <th>astigmatic</th>\n",
       "      <th>tearRate</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>hard</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>soft</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>no lenses</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    age  prescript  astigmatic  tearRate      label\n",
       "0     1          0           0         1  no lenses\n",
       "1     1          0           0         0       soft\n",
       "2     1          0           1         1  no lenses\n",
       "3     1          0           1         0       hard\n",
       "4     1          1           0         1  no lenses\n",
       "5     1          1           0         0       soft\n",
       "6     1          1           1         1  no lenses\n",
       "7     1          1           1         0       hard\n",
       "8     0          0           0         1  no lenses\n",
       "9     0          0           0         0       soft\n",
       "10    0          0           1         1  no lenses\n",
       "11    0          0           1         0       hard\n",
       "12    0          1           0         1  no lenses\n",
       "13    0          1           0         0       soft\n",
       "14    0          1           1         1  no lenses\n",
       "15    0          1           1         0  no lenses\n",
       "16    2          0           0         1  no lenses\n",
       "17    2          0           0         0  no lenses\n",
       "18    2          0           1         1  no lenses\n",
       "19    2          0           1         0       hard\n",
       "20    2          1           0         1  no lenses\n",
       "21    2          1           0         0       soft\n",
       "22    2          1           1         1  no lenses\n",
       "23    2          1           1         0  no lenses"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def dfMap(df):\n",
    "    \n",
    "    #每一列做一次循环\n",
    "    for col in df.columns[:-1]:\n",
    "        col_values = list(set(df[col]))\n",
    "        d =dict(zip(col_values,list(range(len(col_values)))))\n",
    "        #每一列的特征值 做map   \n",
    "        df[col] = df[col].map(d)\n",
    "\n",
    "    return df\n",
    "dfMap(df)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calEnt(df):\n",
    "    #计算每个标签的概率：数组\n",
    "    p_v = df.iloc[:,-1].value_counts(True)\n",
    "    np.log2(p_v) * p_v\n",
    "\n",
    "    return -(np.log2(p_v) * p_v).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bestSplit(df):\n",
    "    \n",
    "    baseEnt = calEnt(df)\n",
    "    colName =''\n",
    "    infoGain = 0\n",
    "    bestGain = 0\n",
    "\n",
    "    for col in df.columns[:-1]:\n",
    "        #当前 特征不同取值概率\n",
    "        p_v = df[col].value_counts(True)\n",
    "        ent_v = []\n",
    "        #此特征的所有值，循环算熵\n",
    "        for value in p_v.index:\n",
    "            #col 在不同取值下的熵\n",
    "            ent_v.append(calEnt(df[df[col] == value]))\n",
    "        \n",
    "        infoGain = baseEnt - (ent_v * p_v).sum()\n",
    "        if (infoGain > bestGain):\n",
    "            bestGain = infoGain\n",
    "            colName = col\n",
    "\n",
    "    return colName"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mySplit(df,col,value):\n",
    "\n",
    "    return df[df[col]==value].drop(col,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "def createTree(df):\n",
    "\n",
    "    #最后一列 标签值\n",
    "    labelFreq = df.iloc[:,-1].value_counts(True)\n",
    "\n",
    "    #截至条件\n",
    "    if labelFreq[0] == 1 or df.shape[0] == 1:\n",
    "        #取概率最高特征值\n",
    "        return labelFreq.index[0]\n",
    "\n",
    "\n",
    "    #最优化分特征\n",
    "    bestCol = bestSplit(df)\n",
    "    valueSet = list(set(df[bestCol]))\n",
    "\n",
    "    tree = {bestCol:{}}\n",
    "    for value in valueSet:\n",
    "        #删除已用特征值 和列，递归调用\n",
    "        tree[bestCol][value] = createTree(mySplit(df,bestCol,value))\n",
    "\n",
    "\n",
    "    return tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'tearRate': {0: {'astigmatic': {0: {'age': {0: 'soft',\n",
       "      1: 'soft',\n",
       "      2: {'prescript': {0: 'no lenses', 1: 'soft'}}}},\n",
       "    1: {'prescript': {0: 'hard',\n",
       "      1: {'age': {0: 'no lenses', 1: 'hard', 2: 'no lenses'}}}}}},\n",
       "  1: 'no lenses'}}"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "myTree = createTree(df)\n",
    "myTree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getValueFromTree (inX,Tree):\n",
    "    colName = next(iter(Tree))\n",
    "    colval = inX[colName]\n",
    "\n",
    "    return Tree[colName][colval]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "def classify(inX,Tree):\n",
    "    inX = dict(zip(df.columns[:-1],[0,1]))\n",
    "    label = getValueFromTree(inX,Tree)\n",
    "#遍历子树，直到底（叶子节点）\n",
    "    while type(label)== dict:\n",
    "        label = getValueFromTree(inX,label)\n",
    "\n",
    "    return label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5, 0.9166666666666666, 'X[3] <= 0.5\\nentropy = 1.326\\nsamples = 24\\nvalue = [4, 15, 5]'),\n",
       " Text(0.4, 0.75, 'X[2] <= 0.5\\nentropy = 1.555\\nsamples = 12\\nvalue = [4, 3, 5]'),\n",
       " Text(0.2, 0.5833333333333334, 'X[0] <= 1.5\\nentropy = 0.65\\nsamples = 6\\nvalue = [0, 1, 5]'),\n",
       " Text(0.1, 0.4166666666666667, 'entropy = 0.0\\nsamples = 4\\nvalue = [0, 0, 4]'),\n",
       " Text(0.3, 0.4166666666666667, 'X[1] <= 0.5\\nentropy = 1.0\\nsamples = 2\\nvalue = [0, 1, 1]'),\n",
       " Text(0.2, 0.25, 'entropy = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
       " Text(0.4, 0.25, 'entropy = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
       " Text(0.6, 0.5833333333333334, 'X[1] <= 0.5\\nentropy = 0.918\\nsamples = 6\\nvalue = [4, 2, 0]'),\n",
       " Text(0.5, 0.4166666666666667, 'entropy = 0.0\\nsamples = 3\\nvalue = [3, 0, 0]'),\n",
       " Text(0.7, 0.4166666666666667, 'X[0] <= 0.5\\nentropy = 0.918\\nsamples = 3\\nvalue = [1, 2, 0]'),\n",
       " Text(0.6, 0.25, 'entropy = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
       " Text(0.8, 0.25, 'X[0] <= 1.5\\nentropy = 1.0\\nsamples = 2\\nvalue = [1, 1, 0]'),\n",
       " Text(0.7, 0.08333333333333333, 'entropy = 0.0\\nsamples = 1\\nvalue = [1, 0, 0]'),\n",
       " Text(0.9, 0.08333333333333333, 'entropy = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
       " Text(0.6, 0.75, 'entropy = 0.0\\nsamples = 12\\nvalue = [0, 12, 0]')]"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "clf = tree.DecisionTreeClassifier(criterion=\"entropy\")\n",
    "clf = clf.fit(np.array(df.iloc[:, :-1]), np.array(df.iloc[:, -1]))\n",
    "\n",
    "tree.plot_tree(clf,filled=True)"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "a6dc62afd8b03c17538a9dfce2fcb18f62cec380cc7b77050462a64b7e4e4814"
  },
  "kernelspec": {
   "display_name": "Python 3.8.0 32-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
